home *** CD-ROM | disk | FTP | other *** search
/ Aminet 34 / Aminet 34 (2000)(Schatztruhe)[!][Dec 1999].iso / Aminet / dev / misc / WHDLoad_dev.lha / WHDLoad / Src / programs / DIC.asm next >
Encoding:
Assembly Source File  |  1999-01-17  |  13.0 KB  |  626 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    DIC.asm
  3. ;  :Contents.    Disk-Image-Creator
  4. ;  :Author.    Bert Jahn
  5. ;  :EMail.    wepl@kagi.com
  6. ;  :Address.    Franz-Liszt-Straße 16, Rudolstadt, 07404, Germany
  7. ;  :Version.    $Id: DIC.asm 0.17 1999/01/17 14:17:38 jah Exp jah $
  8. ;  :History.    15.05.96
  9. ;        20.06.96 returncode supp.
  10. ;        01.06.97 _LVOWaitForChar added,  check for interactive terminal added
  11. ;        17.09.98 after a disk read error and 'cancel' it does not continue
  12. ;             if last disk already reached now (reported by MrLarmer)
  13. ;        12.10.98 bugfix
  14. ;        17.01.99 recompile because error.i changed
  15. ;  :Requires.    OS V37+
  16. ;  :Copyright.    © 1996,1997,1998 Bert Jahn, All Rights Reserved
  17. ;  :Language.    68000 Assembler
  18. ;  :Translator.    Barfly V2.9
  19. ;  :To Do.
  20. ;---------------------------------------------------------------------------*
  21. ;##########################################################################
  22.  
  23.     INCDIR    Includes:
  24.     INCLUDE    lvo/exec.i
  25.     INCLUDE    exec/execbase.i
  26.     INCLUDE    exec/io.i
  27.     INCLUDE    exec/memory.i
  28.     INCLUDE    lvo/dos.i
  29.     INCLUDE    dos/dos.i
  30.     INCLUDE    devices/trackdisk.i
  31.  
  32.     INCLUDE    macros/ntypes.i
  33.     INCLUDE    macros/mulu32.i
  34.  
  35. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  36.  
  37.     STRUCTURE    Globals,0
  38.         APTR    gl_execbase
  39.         APTR    gl_dosbase
  40.         APTR    gl_rdargs
  41.         LABEL    gl_rdarray
  42.         ULONG    gl_rd_device
  43.         ULONG    gl_rd_size
  44.         ULONG    gl_rd_fdisk
  45.         ULONG    gl_rd_ldisk
  46.         ULONG    gl_rc
  47.         ALIGNLONG
  48.         LABEL    gl_SIZEOF
  49.  
  50. BREAKCOUNT    = 1000
  51. MAXFILENAMESIZE    = 30    ;31 with the termination zero
  52.  
  53. ;##########################################################################
  54.  
  55. GL    EQUR    A4        ;a4 ptr to Globals
  56. LOC    EQUR    A5        ;a5 for local vars
  57. CPU    =    68000
  58.  
  59. Version     = 0
  60. Revision = 17
  61.  
  62.     PURE
  63.     OUTPUT    C:DIC
  64.  
  65.     IFND    .passchk
  66.     DOSCMD    "WDate >T:date"
  67. .passchk
  68.     ENDC
  69.  
  70. VER    MACRO
  71.         sprintx    "DIC %ld.%ld ",Version,Revision
  72.     INCBIN    "T:date"
  73.     ENDM
  74.  
  75.         bra    .start
  76.         dc.b    0,"$VER: "
  77.         VER
  78.         dc.b    0
  79.     EVEN
  80. .start
  81.  
  82. ;##########################################################################
  83.  
  84.         move.l    #gl_SIZEOF,d0
  85.         move.l    #MEMF_CLEAR,d1
  86.         move.l    (4).w,a6
  87.         jsr    (_LVOAllocMem,a6)
  88.         tst.l    d0
  89.         beq    .nostrucmem
  90.         move.l    d0,GL
  91.         move.l    a6,(gl_execbase,GL)
  92.         move.l    #20,(gl_rc,GL)
  93.  
  94.         move.l    #37,d0
  95.         lea    (_dosname),a1
  96.         move.l    (gl_execbase,GL),a6
  97.         jsr    _LVOOpenLibrary(a6)
  98.         move.l    d0,(gl_dosbase,GL)
  99.         beq    .nodoslib
  100.  
  101.         lea    (_ver),a0
  102.         bsr    _Print
  103.  
  104.         lea    (_defdev),a0
  105.         move.l    a0,(gl_rd_device,GL)
  106.  
  107.         lea    (_template),a0
  108.         move.l    a0,d1
  109.         lea    (gl_rdarray,GL),a0
  110.         move.l    a0,d2
  111.         moveq    #0,d3
  112.         move.l    (gl_dosbase,GL),a6
  113.         jsr    (_LVOReadArgs,a6)
  114.         move.l    d0,(gl_rdargs,GL)
  115.         bne    .argsok
  116.         lea    (_readargs),a0
  117.         bsr    _PrintErrorDOS
  118.         bra    .noargs
  119. .argsok
  120.         move.l    (gl_rd_size,GL),d0
  121.         beq    .01
  122.         move.l    d0,a0
  123.         bsr    _etoi
  124.         tst.b    (a0)
  125.         beq    .0
  126.         lea    (_badsize),a0
  127.         bsr    _Print
  128.         bra    .badargs
  129. .0        move.l    d0,(gl_rd_size,GL)
  130.         lea    (_withsize),a0
  131.         move.l    d0,-(a7)
  132.         move.l    d0,-(a7)
  133.         move.l    a7,a1
  134.         bsr    _PrintArgs
  135.         addq.l    #8,a7
  136. .01
  137.         moveq    #1,d1            ;default
  138.         move.l    (gl_rd_fdisk,GL),d0
  139.         beq    .1
  140.         move.l    d0,a0
  141.         move.l    (a0),d1
  142. .1        move.l    d1,(gl_rd_fdisk,GL)
  143.  
  144.         moveq    #-1,d1            ;default - no limit
  145.         move.l    (gl_rd_ldisk,GL),d0
  146.         beq    .2
  147.         move.l    d0,a0
  148.         move.l    (a0),d1
  149. .2        move.l    d1,(gl_rd_ldisk,GL)
  150.  
  151.         bsr    _Main
  152. .badargs
  153.         move.l    (gl_rdargs,GL),d1
  154.         move.l    (gl_dosbase,GL),a6
  155.         jsr    (_LVOFreeArgs,a6)
  156. .noargs
  157.         move.l    (gl_dosbase,GL),a1
  158.         move.l    (gl_execbase,GL),a6
  159.         jsr    (_LVOCloseLibrary,a6)
  160. .nodoslib
  161.         move.l    (gl_rc,GL),d7
  162.  
  163.         move.l    #gl_SIZEOF,d0
  164.         move.l    GL,a1
  165.         move.l    (gl_execbase,GL),a6
  166.         jsr    (_LVOFreeMem,a6)
  167.  
  168.         move.l    d7,d0
  169.         rts
  170.  
  171. .nostrucmem    moveq    #20,d0
  172.         rts
  173.  
  174. ;##########################################################################
  175.  
  176.     INCDIR    Sources:
  177.     INCLUDE    dosio.i
  178.         PrintLn
  179.         PrintArgs
  180.         Print
  181.         FlushOutput
  182.         CheckBreak
  183.     INCLUDE    files.i
  184.         SaveFileMsg
  185.     INCLUDE    strings.i
  186.         CopyString
  187.         FormatString
  188.         DoString
  189.         etoi
  190.     INCLUDE    devices.i
  191.         GetDeviceInfo
  192.     INCLUDE    error.i
  193.         PrintErrorTD
  194.  
  195. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  196.  
  197. _Main        move.l    (gl_rd_device,GL),d1
  198.         moveq    #-1,d2
  199.         move.l    (gl_dosbase,GL),a6
  200.         jsr    (_LVOInhibit,a6)
  201.  
  202.         move.l    (gl_dosbase,GL),a6
  203.         jsr    (_LVOInput,a6)
  204.         move.l    d0,d6            ;d6 = stdin
  205.  
  206.         move.l    (gl_rd_fdisk,GL),d7    ;d7 disknumber
  207.         subq.l    #1,d7
  208. .nextdisk    addq.l    #1,d7
  209.         cmp.l    (gl_rd_ldisk,GL),d7
  210.         bhi    .end
  211.  
  212. .again        move.l    d6,d1
  213.         move.l    (gl_dosbase,GL),a6
  214.         jsr    (_LVOIsInteractive,a6)
  215.         tst.l    d0
  216.         beq    .readdisk
  217.  
  218.         lea    (_insdisk),a0
  219.         move.l    (gl_rd_device,GL),-(a7)
  220.         move.l    d7,-(a7)
  221.         move.l    a7,a1
  222.         bsr    _PrintArgs
  223.         addq.l    #8,a7
  224.         bsr    _FlushOutput
  225.         
  226.         move.l    d6,d1
  227.         move.l    (gl_dosbase,GL),a6
  228.         jsr    (_LVOFlush,a6)
  229.         
  230. .wait        move.l    d6,d1
  231.         move.l    #100*1000,d2
  232.         jsr    (_LVOWaitForChar,a6)
  233.         tst.l    d0
  234.         bne    .getc
  235.         bsr    _CheckBreak
  236.         tst.l    d0
  237.         beq    .wait
  238.         bra    .end
  239.         
  240. .getc        move.l    d6,d1
  241.         jsr    (_LVOFGetC,a6)
  242.  
  243. .readdisk    move.l    (gl_rd_device,GL),a0
  244.         bsr    _LoadDisk
  245.         move.l    d1,d4            ;D4 = size
  246.         move.l    d0,d5            ;D5 = buffer
  247.         bne    .save
  248.         
  249.         move.l    d6,d1
  250.         move.l    (gl_dosbase,GL),a6
  251.         jsr    (_LVOIsInteractive,a6)
  252.         tst.l    d0
  253.         beq    .end
  254.  
  255.         lea    (_tryagain),a0
  256.         bsr    _Print
  257.         bsr    _FlushOutput
  258.         move.l    d6,d1
  259.         move.l    (gl_dosbase,GL),a6
  260.         jsr    (_LVOFlush,a6)
  261.         move.l    d6,d1
  262.         jsr    (_LVOFGetC,a6)
  263.         cmp.b    #"a",d0
  264.         blo    .4
  265.         cmp.b    #"z",d0
  266.         bhi    .4
  267.         sub.b    #$20,d0
  268. .4        cmp.b    #"C",d0
  269.         beq    .nextdisk
  270.         cmp.b    #"R",d0
  271.         beq    .again
  272.         bra    .end
  273.  
  274. NAMEBUFLEN = 16
  275.  
  276. .save        lea    (_filefmt),a0        ;fmt
  277.         move.l    d7,-(a7)
  278.         move.l    a7,a1            ;args
  279.         sub.l    #NAMEBUFLEN,a7
  280.         move.l    a7,a2            ;buffer
  281.         moveq    #NAMEBUFLEN,d0        ;bufsize
  282.         bsr    _FormatString
  283.         move.l    d4,d0            ;size
  284.         tst.l    (gl_rd_size,GL)
  285.         beq    .s
  286.         cmp.l    (gl_rd_size,GL),d0
  287.         bls    .s
  288.         move.l    (gl_rd_size,GL),d0
  289. .s        move.l    d5,a0            ;buffer
  290.         move.l    a2,a1            ;filename
  291.         bsr    _SaveFileMsg
  292.         add.l    #NAMEBUFLEN+4,a7
  293.         move.l    d0,d2
  294.         move.l    d5,a1
  295.         move.l    (gl_execbase,GL),a6
  296.         jsr    (_LVOFreeVec,a6)
  297.         tst.l    d2
  298.         beq    .end
  299.  
  300.         cmp.l    (gl_rd_ldisk,GL),d7
  301.         bne    .nextdisk
  302.         clr.l    (gl_rc,GL)
  303. .end
  304.         move.l    (gl_rd_device,GL),d1
  305.         moveq    #0,d2
  306.         move.l    (gl_dosbase,GL),a6
  307.         jsr    (_LVOInhibit,a6)
  308.         
  309.         rts
  310.  
  311. ;##########################################################################
  312. ;----------------------------------------
  313. ; Lesen einer Diskette
  314. ; Übergabe :    A0 = CPTR device name
  315. ; Rückgabe :    D0 = APTR loaded buffer OR NIL
  316. ;        D1 = LONG size of buffer
  317.  
  318.     NSTRUCTURE    local_dodisk,0
  319.         NSTRUCT    ld_di,devi_SIZEOF    ;DeviceInfo
  320.         NSTRUCT    ld_devname,DEVNAMELEN    ;devicename without ":"
  321.         NLABEL    ld_SIZEOF
  322.  
  323. _LoadDisk    movem.l    d2-d7/a6,-(a7)
  324.         link    LOC,#ld_SIZEOF
  325.         moveq    #0,d7            ;D7 = returncode (bufptr)
  326.         moveq    #0,d6            ;D6 = bufsize
  327.         
  328.         lea    (ld_devname,LOC),a1
  329.         moveq    #DEVNAMELEN-1,d0
  330. .c        move.b    (a0)+,(a1)+
  331.         dbeq    d0,.c
  332.         clr.b    -(a1)
  333.         move.b    -(a1),d0
  334.         cmp.b    #":",d0
  335.         bne    .1
  336.         clr.b    (a1)
  337. .1
  338.         lea    (ld_devname,LOC),a0
  339.         lea    (ld_di,LOC),a1
  340.         bsr    _GetDeviceInfo
  341.         tst.l    d0
  342.         beq    .nodevi
  343.  
  344.         lea    (_m_readdisk),a0
  345.         move.l    (ld_di+devi_Unit,LOC),-(a7)
  346.         pea    (ld_di+devi_Device,LOC)
  347.         pea    (ld_devname,LOC)
  348.         move.l    a7,a1
  349.         bsr    _PrintArgs
  350.         add.w    #12,a7
  351.         
  352.         move.l    (ld_di+devi_LowCyl,LOC),d2
  353.     IFEQ CPU-68020
  354.         mulu.l    (ld_di+devi_Surfaces,LOC),d2
  355.     ELSE
  356.         move.l    (ld_di+devi_Surfaces,LOC),d0
  357.         mulu32    d0,d2                    ;D2 = starttrack
  358.     ENDC
  359.  
  360.         move.l    (ld_di+devi_HighCyl,LOC),d3
  361.         sub.l    (ld_di+devi_LowCyl,LOC),d3
  362.         addq.l    #1,d3
  363.     IFEQ CPU-68020
  364.         mulu.l    (ld_di+devi_Surfaces,LOC),d3
  365.     ELSE
  366.         move.l    (ld_di+devi_Surfaces,LOC),d0
  367.         mulu32    d0,d3                    ;D3 = tracks
  368.     ENDC
  369.  
  370.     IFEQ CPU-68020
  371.         move.l    (ld_di+devi_SizeBlock,LOC),d4
  372.         mulu.l    (ld_di+devi_BlocksPerTrack,LOC),d4
  373.     ELSE
  374.         move.l    (ld_di+devi_SizeBlock,LOC),d4
  375.         move.l    (ld_di+devi_BlocksPerTrack,LOC),d0
  376.         mulu32    d0,d4                    ;D4 = tracksize
  377.     ENDC
  378.  
  379.         lea    (_m_diskgeo),a0
  380.         move.l    d3,d6
  381.         mulu32    d4,d6        ;disksize = cyls * heads * blktrk * blksize
  382.         move.l    d6,-(a7)
  383.         move.l    (ld_di+devi_HighCyl,LOC),-(a7)
  384.         move.l    (ld_di+devi_LowCyl,LOC),-(a7)
  385.         move.l    (ld_di+devi_BlocksPerTrack,LOC),-(a7)
  386.         move.l    (ld_di+devi_Surfaces,LOC),-(a7)
  387.         move.l    (ld_di+devi_SizeBlock,LOC),-(a7)
  388.         move.l    a7,a1
  389.         bsr    _PrintArgs
  390.         add.w    #6*4,a7
  391.  
  392.     ;calculate readlen / tracks
  393.         tst.l    (gl_rd_size,GL)
  394.         beq    .sok
  395.         cmp.l    (gl_rd_size,GL),d6
  396.         bls    .sok
  397.         moveq    #0,d3
  398.         moveq    #0,d6
  399. .add        addq.l    #1,d3                ;D3 = tracks
  400.         add.l    d4,d6                ;D6 = readsize
  401.         cmp.l    (gl_rd_size,GL),d6
  402.         blo    .add
  403. .sok
  404.         move.l    d6,d0
  405.         move.l    #MEMF_ANY,d1
  406.         move.l    (gl_execbase,GL),a6
  407.         jsr    (_LVOAllocVec,a6)
  408.         move.l    d0,d7
  409.         bne    .memok
  410.         moveq    #0,d0
  411.         lea    (_nomem),a0
  412.         lea    (_getdiskmem),a1
  413.         bsr    _PrintError
  414.         bra    .nomem
  415. .memok
  416.         lea    (ld_di+devi_Device,LOC),a0
  417.         move.l    a0,d0                ;D0 = devicename
  418.         move.l    (ld_di+devi_Unit,LOC),d1    ;D1 = unit
  419.         move.l    d7,a1                ;A1 = buffer
  420.         bsr    _ReadDisk
  421.         tst.l    d0
  422.         bne    .ok
  423.  
  424.         move.l    d7,a1
  425.         move.l    (gl_execbase,GL),a6
  426.         jsr    (_LVOFreeVec,a6)
  427.         moveq    #0,d6
  428.         moveq    #0,d7
  429. .ok
  430. .nomem
  431. .nodevi
  432.         move.l    d6,d1
  433.         move.l    d7,d0
  434.         unlk    LOC
  435.         movem.l    (a7)+,d2-d7/a6
  436.         rts
  437.  
  438. ;----------------------------------------
  439. ; Lesen Diskette
  440. ; Übergabe :    D0 = APTR  device name
  441. ;        D1 = ULONG unit number
  442. ;        D2 = ULONG start track
  443. ;        D3 = ULONG tracks
  444. ;        D4 = ULONG bytes per track
  445. ;        A1 = APTR  buffer to read data in
  446. ;        GL = STRUCT globals
  447. ; Rückgabe :    D0 = BOOL success
  448.  
  449.     NSTRUCTURE    local_readdisk,0
  450.         NAPTR    lrd_device
  451.         NULONG    lrd_unit
  452.         NAPTR    lrd_buffer
  453.         NAPTR    lrd_msgport
  454.         LABEL    lrd_SIZEOF
  455.  
  456. _ReadDisk    movem.l    d2-d3/d7/a2/a6,-(a7)
  457.         link    LOC,#lrd_SIZEOF
  458.         move.l    d0,(lrd_device,LOC)
  459.         move.l    d1,(lrd_unit,LOC)
  460.         move.l    a1,(lrd_buffer,LOC)
  461.         moveq    #-1,d7            ;D7 = return (true)
  462.  
  463.         move.l    (gl_execbase,GL),a6    ;A6 = execbase !!!
  464.         jsr    (_LVOCreateMsgPort,a6)
  465.         move.l    d0,(lrd_msgport,LOC)
  466.         bne    .portok
  467.         moveq    #0,d0
  468.         lea    (_noport),a0
  469.         sub.l    a1,a1
  470.         bsr    _PrintError
  471.         moveq    #0,d7
  472.         bra    .noport
  473. .portok        
  474.         move.l    (lrd_msgport,LOC),a0
  475.         move.l    #IOTD_SIZE,d0
  476.         jsr    (_LVOCreateIORequest,a6)
  477.         move.l    d0,a2
  478.         tst.l    d0
  479.         bne    .ioreqok
  480.         moveq    #0,d0
  481.         lea    (_noioreq),a0
  482.         sub.l    a1,a1
  483.         bsr    _PrintError
  484.         moveq    #0,d7
  485.         bra    .noioreq
  486. .ioreqok
  487.         move.l    (lrd_device,LOC),a0
  488.         move.l    (lrd_unit,LOC),d0
  489.         move.l    a2,a1            ;ioreq
  490.         move.l    #0,d1            ;flags
  491.     move.l    d3,-(a7)            ;BUG in fucking mfm.device
  492.         jsr    (_LVOOpenDevice,a6)
  493.     move.l    (a7)+,d3            ;BUG in fucking mfm.device
  494.         tst.l    d0
  495.         beq    .deviceok
  496.         move.b    (IO_ERROR,a2),d0
  497.         lea    (_opendevice),a0
  498.         bsr    _PrintErrorTD
  499.         moveq    #0,d7
  500.         bra    .nodevice
  501. .deviceok
  502.         move.l    a2,a1
  503.         move.w    #TD_CHANGENUM,(IO_COMMAND,a1)
  504.         jsr    (_LVODoIO,a6)
  505.         move.l    (IO_ACTUAL,a2),(IOTD_COUNT,a2)    ;the diskchanges
  506.  
  507.         move.l    (lrd_buffer,LOC),(IO_DATA,a2)    ;dest buf
  508.         move.l    d2,d0
  509.         mulu32    d4,d0
  510.         move.l    d0,(IO_OFFSET,a2)        ;begin at disk (offset)
  511.         move.l    d4,(IO_LENGTH,a2)        ;bytes per track
  512.         move.w    #ETD_READ,(IO_COMMAND,a2)
  513.         
  514.         add.l    d2,d3                ;d3 lasttrack
  515.  
  516.         bsr    _PrintLn
  517. .loop        lea    (_diskprogress),a0        ;output progress
  518.         move.l    d3,-(a7)
  519.         sub.l    d2,(a7)
  520.         subq.l    #1,(a7)
  521.         move.l    d2,-(a7)
  522.         move.l    a7,a1
  523.         bsr    _PrintArgs
  524.         addq.l    #8,a7
  525.         
  526.         bsr    _CheckBreak            ;check for CTRL-C
  527.         tst.l    d0
  528.         bne    .readbreak
  529.         
  530.         move.l    a2,a1                ;read one track
  531.         jsr    (_LVODoIO,a6)
  532.         move.b    (IO_ERROR,a2),d0
  533.         bne    .readerr
  534. .readfurther    addq.l    #1,d2
  535.         cmp.l    d2,d3
  536.         beq    .readok
  537.         add.l    d4,(IO_OFFSET,a2)        ;begin at disk (offset)
  538.         add.l    d4,(IO_DATA,a2)            ;dest buf
  539.         bra    .loop
  540.  
  541. .readerr    lea    (_readdisk),a0
  542.         bsr    _PrintErrorTD
  543.         cmp.b    #TDERR_DiskChanged,(IO_ERROR,a2)
  544.         beq    .readbreak
  545.     ;    tst.l    (gl_rd_ignoreerrors,GL)
  546.     ;    beq    .readbreak
  547.         bsr    _PrintLn
  548.         move.l    (IO_DATA,a2),a0            ;fill unreadable area with "WRIP"
  549.         move.l    (IO_LENGTH,a2),d0
  550.         lsr.l    #2,d0
  551. .fill        move.l    #"TDIC",(a0)+
  552.         subq.l    #1,d0
  553.         bne    .fill
  554.         bra    .readfurther
  555. .readbreak    moveq    #0,d7
  556. .readok
  557.         move.l    a2,a1
  558.         move.l    #0,(IO_LENGTH,a1)
  559.         move.w    #ETD_MOTOR,(IO_COMMAND,a1)
  560.         jsr    (_LVODoIO,a6)
  561.  
  562.         move.l    a2,a1
  563.         jsr    (_LVOCloseDevice,a6)
  564.         
  565. .nodevice    move.l    a2,a0
  566.         jsr    (_LVODeleteIORequest,a6)
  567.         
  568. .noioreq    move.l    (lrd_msgport,LOC),a0
  569.         jsr    (_LVODeleteMsgPort,a6)
  570.         
  571. .noport        move.l    d7,d0
  572.         unlk    LOC
  573.         movem.l    (a7)+,d2-d3/d7/a2/a6
  574.         rts
  575.  
  576. ;##########################################################################
  577.  
  578.  
  579. ;##########################################################################
  580.  
  581. _defdev        dc.b    "DF0:",0
  582. _insdisk    dc.b    10,"Insert disk %ld in drive %s and press RETURN (^C to cancel) ...",0
  583. _tryagain    dc.b    "Retry/Cancel/Quit (r/c/Q) : ",0
  584. _filefmt    dc.b    "Disk.%ld",0
  585.  
  586. ;Messages
  587. _m_readdisk    dc.b    "read from ",155,"1m%s",155,"22m: (%s %ld)",10,0
  588. _m_diskgeo    dc.b    "(blksize=%ld heads=%ld blktrk=%ld lcyl=%ld hcyl=%ld) size=%ld",10,0
  589. _m_savedisk    dc.b    "save disk as ",155,"3m%s ",155,"23m",10,0
  590. _m_savefile    dc.b    "save file ",155,"3m%s ",155,"23m",10,0
  591. _diskprogress    dc.b    11,"reading track %ld left %ld  ",10,0
  592. _withsize    dc.b    "limited reading of $%lx=%ld bytes",10,0
  593.  
  594. ; Errors
  595. _nomem        dc.b    "not enough free store",0
  596. _noport        dc.b    "can't create MessagePort",0
  597. _noioreq    dc.b    "can't create IO-Request",0
  598. _nodev        dc.b    "device doesn't exist",0
  599. _baddev        dc.b    "cannot handle this device",0
  600. _badsize    dc.b    "illegal argument for SIZE/K",10,0
  601.  
  602. ; Operationen
  603. _readargs    dc.b    "read arguments",0
  604. _getdiskmem    dc.b    "alloc mem for disk",0
  605. _readdisk    dc.b    "read disk",0
  606. _getdevinfo    dc.b    "get dev info",0
  607. _opendevice    dc.b    "open device",0
  608.  
  609. ;subsystems
  610. _dosname    DOSNAME
  611.  
  612. _template    dc.b    "DEVICE"        ;name of device (default "DF0:)
  613.         dc.b    ",SIZE/K"        ;number of bytes
  614.         dc.b    ",FD=FIRSTDISK/K/N"    ;number of first disk
  615.         dc.b    ",LD=LASTDISK/K/N"    ;number of last disk
  616.         dc.b    0
  617.  
  618. _ver        VER
  619.         dc.b    " ",155,"1mD",155,"22misk ",155,"1mI",155,"22mmage ",155,"1mC",155,"22mreator by Bert Jahn"
  620.         dc.b    10,0
  621.  
  622. ;##########################################################################
  623.  
  624.     END
  625.  
  626.